Spring Security এর Remember-Me ফিচার

Java Technologies - স্প্রিং সিকিউরিটি (Spring Security) - Spring Security এর Form-Based Authentication
188

Spring Security-র Remember-Me ফিচার ব্যবহারকারীদের দীর্ঘ সময় ধরে লগইন অবস্থায় রাখতে সাহায্য করে, এমনকি ব্রাউজার বন্ধ হওয়ার পরেও। এটি সাধারণত একটি কুকি ব্যবহার করে কাজ করে, যা ব্যবহারকারীর তথ্য সংরক্ষণ করে।


Remember-Me ফিচারের সুবিধা

  1. Extended Authentication: ব্যবহারকারীকে বারবার লগইন করতে হয় না।
  2. Customizable: Remember-Me ফিচারকে সহজেই কাস্টমাইজ করা যায়।
  3. Cookie-based Implementation: সাধারণত একটি নিরাপদ কুকি ব্যবহার করে তথ্য সংরক্ষণ করা হয়।
  4. Token-based Support: একটি টোকেন ব্যবহার করে Remember-Me বৈধতা নিশ্চিত করা হয়।

Remember-Me এর কাজের পদ্ধতি

  1. ব্যবহারকারী সফলভাবে লগইন করলে, একটি Remember-Me কুকি ব্রাউজারে সেট করা হয়।
  2. ব্যবহারকারী পরবর্তী বার অ্যাপ্লিকেশনে প্রবেশ করলে, কুকির তথ্য যাচাই করে স্বয়ংক্রিয়ভাবে লগইন করা হয়।
  3. এই প্রক্রিয়া নিরাপদ রাখতে টোকেন এনক্রিপশন এবং কুকি ভ্যালিডেশন ব্যবহার করা হয়।

Implementation Steps

Step 1: Maven Dependency

pom.xml ফাইলে Spring Security ডিপেন্ডেন্সি যোগ করুন:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Step 2: Security Configuration

Example: Basic Remember-Me Configuration

একটি Java কনফিগারেশন ক্লাস তৈরি করুন যেখানে Remember-Me কনফিগার করা হবে।

package com.example.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().authenticated() // All requests require authentication
            .and()
            .formLogin() // Enable form-based login
                .loginPage("/login")
                .permitAll()
            .and()
            .logout()
                .permitAll()
            .and()
            .rememberMe() // Enable Remember-Me feature
                .key("uniqueAndSecret") // Unique key for hashing
                .tokenValiditySeconds(1209600); // 14 days (in seconds)

        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder(); // Password hashing
    }
}

Step 3: Add Login Page

একটি কাস্টম লগইন পৃষ্ঠা যোগ করুন:

Controller:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginController {
    @GetMapping("/login")
    public String login() {
        return "login";
    }
}

HTML (login.html):

<!DOCTYPE html>
<html>
<head>
    <title>Login</title>
</head>
<body>
    <form action="/login" method="post">
        <label for="username">Username:</label>
        <input type="text" id="username" name="username"><br>
        <label for="password">Password:</label>
        <input type="password" id="password" name="password"><br>
        <label>
            <input type="checkbox" name="remember-me"> Remember Me
        </label><br>
        <button type="submit">Login</button>
    </form>
</body>
</html>

Step 4: Token-based Remember-Me (Optional)

Persistent Token Approach

Remember-Me ফিচার আরও সুরক্ষিত করতে ডাটাবেসে টোকেন সংরক্ষণ করুন:

  1. Token Table তৈরি করুন: Spring Security টোকেন সংরক্ষণের জন্য একটি টেবিল তৈরি করবে।

    CREATE TABLE persistent_logins (
        username VARCHAR(64) NOT NULL,
        series VARCHAR(64) NOT NULL,
        token VARCHAR(64) NOT NULL,
        last_used TIMESTAMP NOT NULL,
        PRIMARY KEY (series)
    );
    
  2. PersistentTokenRepository কনফিগার করুন:

    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.web.authentication.rememberme.PersistentTokenRepository;
    import org.springframework.security.web.authentication.rememberme.JdbcTokenRepositoryImpl;
    
    import javax.sql.DataSource;
    
    @Configuration
    public class RememberMeTokenConfig {
    
        @Bean
        public PersistentTokenRepository persistentTokenRepository(DataSource dataSource) {
            JdbcTokenRepositoryImpl tokenRepository = new JdbcTokenRepositoryImpl();
            tokenRepository.setDataSource(dataSource);
            return tokenRepository;
        }
    }
    
  3. Update Security Configuration:

    http
        .rememberMe()
            .tokenRepository(persistentTokenRepository(dataSource))
            .tokenValiditySeconds(1209600) // 14 days
            .key("uniqueAndSecret");
    

Customizing Remember-Me

  1. Token Expiration Time: .tokenValiditySeconds(604800) → 7 দিন (সেকেন্ডে)।
  2. Custom Cookie Name: .rememberMeCookieName("my-remember-me-cookie")
  3. Custom Key: .key("myUniqueKey") → কুকির নিরাপত্তা উন্নত করতে।

Best Practices

  1. Use Persistent Token Repository: এটি Remember-Me কুকি চুরি প্রতিরোধ করে।
  2. Use HTTPS: কুকি চুরি এবং ম্যান-ইন-দ্য-মিডল আক্রমণ থেকে রক্ষা পেতে।
  3. Limit Token Validity: টোকেনের বৈধতা সময় সীমিত রাখুন (উদাহরণ: 7 বা 14 দিন)।
  4. Secure Key: .key() এর মান গোপন এবং অনন্য রাখুন।

Spring Security-র Remember-Me ফিচার ব্যবহারকারীর অভিজ্ঞতা উন্নত করে এবং দীর্ঘ সময় ধরে সেশন মেইনটেইন করতে সাহায্য করে। সঠিক কনফিগারেশনের মাধ্যমে এটি নিরাপদ এবং কার্যকর করা সম্ভব।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...